import java.util.ArrayList;
import java.util.List;

public class StringExtractor {

    public static void main(String[] args) {
        String sourceCode = "一般学习一门编程语言的时候，基本上第一个程序是输出\"Hello World!\"";
        String result = extractAndFormatStrings(sourceCode);
        System.out.println(result); // 输出处理后的源代码
    }

    public static String extractAndFormatStrings(String sourceCode) {
        StringBuilder result = new StringBuilder();
        StringBuilder currentString = new StringBuilder();
        boolean inString = false; // 标记是否在字符串内部
        boolean escapeNext = false; // 标记下一个字符是否被转义

        for (int i = 0; i < sourceCode.length(); i++) {
            char ch = sourceCode.charAt(i);

            if (escapeNext) {
                // 如果上一个字符是反斜杠，则当前字符被转义
                currentString.append(ch);
                escapeNext = false;
            } else {
                if (ch == '\\') {
                    // 遇到反斜杠，设置转义状态
                    escapeNext = true;
                    if (inString) {
                        currentString.append(ch); // 在字符串中，添加反斜杠
                    }
                } else if (ch == '\"') {
                    if (inString) {
                        // 如果已经在字符串内部，结束字符串并保存
                        result.append(currentString.toString());
                        currentString.setLength(0); // 清空当前字符串
                        inString = false;
                    } else {
                        // 如果不在字符串内部，开始一个新的字符串
                        if (result.length() > 0 && currentString.length() > 0) {
                            result.append(currentString.toString());
                        }
                        currentString.append(ch);
                        inString = true;
                    }
                } else {
                    if (inString) {
                        // 如果在字符串内部，添加字符到当前字符串
                        currentString.append(ch);
                    } else {
                        // 如果不在字符串内部，直接添加到结果
                        result.append(ch);
                    }
                }
            }
        }

        // 添加最后一个非字符串部分
        if (result.length() > 0 && currentString.length() > 0) {
            result.append(currentString.toString());
        }

        return result.toString();
    }
}